포인터와 배열
✒️ 2025-05-15 15:54 내용 수정
수제비 2024 정보처리기사 필기 5판 1권의 내용을 정리
TCPSchool의 내용을 정리
(*포인터명)[]은 2차원 배열을 가리키는 배열 포인터* 포인터명[]은 포인터 변수를 모아 놓은 포인터 배열
타입 (*포인터명)[열의길이]; // 배열 포인터
타입* 포인터명[행의길이]; // 포인트 배열
포인터 배열
배열 요소로 포인터 변수를 가지는 배열
- 포인터 변수를 저장할 수 있는 배열이다.
타입* 배열명[행의길이] = {&변수명1, &변수명2, ...};
%p는 포인터 주소를 출력할 때 사용한다.int*를%p로 출력 시void*로 캐스팅하는 것이 좋다.
#include <stdio.h>
int main(void)
{
int a = 1, b = 2, c = 3;
int* arr[] = {&a, &b, &c}; // 포인터 배열
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++)
{
printf("arr[%d] 요소가 가리키는 주소: %p, 저장된 값 : %d\n",
i, (void*)arr[i], *arr[i]);
}
return 0;
}
arr[0] 요소가 가리키는 주소: 00000000005ffe94, 저장된 값 : 1
arr[1] 요소가 가리키는 주소: 00000000005ffe90, 저장된 값 : 2
arr[2] 요소가 가리키는 주소: 00000000005ffe8c, 저장된 값 : 3
배열 포인터
배열을 가리킬 수 있는 포인터
- 2차원 이상의 배열을 가리킬 때 포인터를 통해 배열과 같은 인덱싱을 사용할 수 있다.
- 1차원 배열에선 의미가 없고, 2차원 이상의 배열에서 의미가 있다.
- 포인터를 배열처럼 사용하기 위해 배열 포인터를 정의한다.
- 2차원 배열의 배열 이름으로 포인터 연산을 하면 배열의 행 단위로 이동한다.
arr자체는타입명 (*)[열의길이]으로 배열 포인터는 행의 시작 주소를 가리키는 포인터이다.arr의 값은arr[0]와arr[0][0]을 가리킨다.arr[1]은arr[1][0]을 가리킨다.
타입 배열명[행의길이][열의길이];
타입 (*포인터명)[열의길이];
int arr[2][3];
int (*pArr)[3];
#include <stdio.h>
int main(void)
{
int arr[2][3] ={
{1, 2, 3},
{4, 5, 6}
};
printf("arr[0][0]에 저장된 데이터 : %d\n", *arr[0]);
printf("arr[1][0]에 저장된 데이터 : %d\n", *arr[1]);
int (*pArr)[3] = arr; // arr[0]을 참조
printf("arr[1][1] : %d\n", arr[1][1]); // 배열 이름 참조
printf("pArr[1][1]의 참조 결과 : %d\n", pArr[1][1]); // 배열 포인터 참조
return 0;
}
arr[0][0]에 저장된 데이터 : 1
arr[1][0]에 저장된 데이터 : 4
arr[1][1] : 5
pArr[1][1]의 참조 결과 : 5